home *** CD-ROM | disk | FTP | other *** search
/ Disc to the Future 2 / Disc to the Future Part II Programmer's Reference (Wayzata Technology)(6013)(1992).bin / MAC / HYPERCAR / RIDDLE / RIDDLE.C < prev   
C/C++ Source or Header  |  1990-07-16  |  1KB  |  71 lines

  1. #include <stdio.h>
  2. #include <unix.h>
  3. #include <console.h>
  4. #define    random rand
  5. #define    srandom    srand
  6.  
  7. #define QUEST_FILE "questions"
  8. #define ANS_FILE "answers"
  9.  
  10. main(argc,argv)
  11. int argc;
  12. char **argv;
  13. {
  14.     argc = ccommand(&argv);
  15.     switch(argc) {
  16.         case 1: return(ask(QUEST_FILE, 0));
  17.             break;
  18.         case 2: if (!strcmp(argv[1], "-a")) {
  19.                 fprintf(stderr, "No answer number!\n");
  20.                 return(-1);
  21.             } else return(ask(QUEST_FILE, atoi(argv[1])));
  22.             break;
  23.         default: if (!strcmp(argv[1], "-a")) {
  24.                 return(ask(ANS_FILE, atoi(argv[2])));
  25.                 break;
  26.             } else return(ask(QUEST_FILE, atoi(argv[1])));
  27.     }
  28. }
  29.  
  30. ask(file, q)
  31. char *file;
  32. int q;
  33. {
  34.  
  35.     int count = 0, numquest, num;
  36.     int blob;
  37.     FILE *InFile;
  38.  
  39.     if (!(InFile = fopen(file, "r"))) {
  40.         fprintf(stderr, "Can't open %s\n", file);
  41.         exit(-1);
  42.     }
  43.  
  44.     fscanf(InFile, "%d", &numquest);        /* no. of questions */
  45.  
  46.     if (q == 0) {
  47.         srandom(getpid());
  48.         num = random() % numquest + 1;
  49.     } else
  50.         num = q;
  51.  
  52.     if ((num < 1) || (num > numquest)) {
  53.         fprintf(stderr, "Invalid question number\n");
  54.         exit(-1);
  55.     }
  56.  
  57.     while (count < num) 
  58.         if ((blob = getc(InFile)) == '~') count++ ;
  59.         else if (blob == EOF) {
  60.             fprintf(stderr, "File not in valid format\n");
  61.             exit(-1);
  62.         }
  63.  
  64.     while (((blob = getc(InFile)) != '~') && (blob != EOF))
  65.         printf("%c", blob);
  66.  
  67.     fclose(InFile);
  68.  
  69.     return(num);
  70. }
  71.